﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using ProjControleBLL;
using ProjControleModelos;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using ProjControle.Relatórios;

using System.Windows.Forms;

namespace ProjControle
{
    public partial class frm_orcamentos : Form
    {
        public frm_orcamentos()
        {
            InitializeComponent();
        }
        DataTable tab;
        DataTable tab2;
        String controle;

        #region Métodos
        public void carregaCampos(Orcamentos objO)
        {
            try
            {
                tbCodCliente.Text = objO.cod_cliente.ToString();
                tbCodigo.Text = objO.cod_orcamento.ToString();
                tbCodFunc.Text = objO.cod_funcionario.ToString();
                tbValidade.Text = objO.validade_orcamento.ToString();
                dtOrcamento.Value = objO.dt_orcamento;
                tbValorTotal.Text = objO.val_orcamento.ToString("C2");
                tbQntdParc.Text = objO.qntd_parc_orcamento.ToString();
                carregaLabel(objO.cod_funcionario, objO.cod_cliente);
                tbValNegociado.Text = objO.val_negociado.ToString("C2");
                tbObservacao.Text = objO.observacoes;
                DataRow linha;
                foreach (Orcamento_Produtos objOP in objO.lProdutos)
                {
                    linha = tab.NewRow();
                    linha["cod_produto"] = objOP.cod_produto;
                    Produtos objProd = new Produtos();
                    ProdutosBLL objProdBLL = new ProdutosBLL();
                    objProd = objProdBLL.localizar(objOP.cod_produto);
                    if (objProd.cod_produto != 0)
                        linha["descricao_produto"] = objProd.descricao_produto;
                    linha["val_produto"] = objOP.val_produto;
                    linha["qntd_produto"] = objOP.qtd_produto;
                    tab.Rows.Add(linha);
                    tab.AcceptChanges();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void carregaLabel(int cod_func,int cod_cliente)
        {
            try
            {
                ClienteBLL objClienteBLL = new ClienteBLL();
                Cliente objCliente = new Cliente();
                FuncionarioBLL objFuncBLL = new FuncionarioBLL();
                Funcionarios objFunc = new Funcionarios();
                objCliente = objClienteBLL.localizar(cod_cliente);
                objFunc = objFuncBLL.localizar(cod_func);
                if (objFunc.codigo != 0)
                    lNomeFunc.Text = objFunc.nome;
                if (objCliente.codigo != 0)
                    lNomeCliente.Text = objCliente.nome;
                objClienteBLL = null;
                objFuncBLL = null;
                objCliente = null;
                objFunc = null;
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public Orcamentos carregaPropriedades()
        {
            Orcamentos objO = new Orcamentos();
            try
            {
                if (tbCodigo.Text == "")
                    objO.cod_orcamento = 0;
                else
                    objO.cod_orcamento = int.Parse(tbCodigo.Text);
                objO.cod_cliente = int.Parse(tbCodCliente.Text);
                objO.cod_funcionario = int.Parse(tbCodFunc.Text);
                objO.dt_orcamento = dtOrcamento.Value;
                objO.qntd_parc_orcamento = int.Parse(tbQntdParc.Text);
                objO.val_orcamento = Double.Parse(tbValorTotal.Text.Replace("R$",""));
                objO.validade_orcamento = int.Parse(tbValidade.Text);
                objO.val_negociado = Double.Parse(tbValNegociado.Text.Replace("R$",""));
                objO.observacoes = tbObservacao.Text;
                objO.lProdutos.Clear();
                Orcamento_Produtos objOP;
                
                    foreach (DataRow linha in tab.Rows)
                    {
                        objOP = new Orcamento_Produtos();
                        objOP.cod_produto = int.Parse(linha["cod_produto"].ToString());
                        objOP.qtd_produto = int.Parse(linha["qntd_produto"].ToString());
                        objOP.val_produto = Double.Parse(linha["val_produto"].ToString().Replace("R$", ""));
                        objO.lProdutos.Add(objOP);
                    }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            return objO;
        }
        public void carregaLabel()
        {
            try
            {

            }
            catch (Exception ex)
            {
                
                throw ex;
            }
        }
        public Boolean validaCampos()
        {
            Boolean ret = true;
            try
            {
                if (tbCodCliente.Text == "" || tbCodCliente.Text == "0")
                {
                    MessageBox.Show("O Campo CLIENTE precisa ser preenchido", "Validar Campos");
                    tbCodCliente.Focus();
                    ret = false;
                }
                if (tbCodFunc.Text == "" || tbCodFunc.Text == "0")
                {
                    MessageBox.Show("O Campo FUNCIONARIO precisa ser preenchido", "Validar Campos");
                    tbCodFunc.Focus();
                    ret = false;
                }
                if (tbValidade.Text == "" || tbValidade.Text == "0")
                {
                    MessageBox.Show("O Campo VALIDADE precisa ser preenchido", "Validar Campos");
                    tbValidade.Focus();
                    ret = false;
                }
                if (tbValorTotal.Text == "" || tbValorTotal.Text == "0")
                {
                    MessageBox.Show("O Campo VALOR TOTAL precisa ser preenchido", "Validar Campos");
                    tbValorTotal.Focus();
                    ret = false;
                }
                if (tbValNegociado.Text == "" || tbValNegociado.Text == "0")
                {
                    MessageBox.Show("O Campo VALOR NEGOCIADO precisa ser preenchido", "Validar Campos");
                    tbValNegociado.Focus();
                    ret = false;
                }
                if (tab.Rows.Count == 0)
                {
                    MessageBox.Show("Não existem produtos na lista de orçamento", "Valida Campos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    ret = false;
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            return ret;
        }
        public void associaGrid()
        {
            try
            {
                tab = new DataTable();
                tab.Columns.Add("cod_produto");
                tab.Columns.Add("descricao_produto");
                tab.Columns.Add("qntd_produto");
                tab.Columns.Add("val_produto");
                dgProdutos.DataSource = tab;
                dgProdutos.AllowUserToResizeColumns = false;
                dgProdutos.AllowUserToResizeRows = false;
                dgProdutos.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgProdutos.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgProdutos.AllowUserToAddRows = false;
                dgProdutos.Columns["cod_produto"].HeaderText = "Código";
                dgProdutos.Columns["cod_produto"].Width = 70;
                dgProdutos.Columns["descricao_produto"].HeaderText = "Descrição";
                dgProdutos.Columns["descricao_produto"].Width = 240;
                dgProdutos.Columns["qntd_produto"].HeaderText = "Qntd";
                dgProdutos.Columns["qntd_produto"].Width = 70;
                dgProdutos.Columns["val_produto"].HeaderText = "Valor";
                dgProdutos.Columns["val_produto"].Width = 70;
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void associaGridConsulta()
        {
            try
            {
            tab2 = new DataTable();
            tab2.Columns.Add("cod_orcamento");
            tab2.Columns.Add("nome_cliente");
            tab2.Columns.Add("val_orcamento");
            tab2.Columns.Add("dt_orcamento");
            dgOrcamentos.DataSource = tab2;
            dgOrcamentos.AllowUserToResizeColumns = false;
            dgOrcamentos.AllowUserToResizeRows = false;
            dgOrcamentos.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgOrcamentos.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgOrcamentos.AllowUserToAddRows = false;
            dgOrcamentos.Columns["cod_orcamento"].HeaderText = "Código";
            dgOrcamentos.Columns["cod_orcamento"].Width = 100;
            dgOrcamentos.Columns["nome_cliente"].HeaderText = "Cliente";
            dgOrcamentos.Columns["nome_cliente"].Width = 320;
            dgOrcamentos.Columns["val_orcamento"].HeaderText = "Valor";
            dgOrcamentos.Columns["val_orcamento"].Width = 100;
            dgOrcamentos.Columns["dt_orcamento"].HeaderText = "Data";
            dgOrcamentos.Columns["dt_orcamento"].Width = 100;
            OrcamentoBLL objBLL = new OrcamentoBLL();
            dgOrcamentos.DataSource = objBLL.localizar("");
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void inserir()
        {
            controle = "I";
            gbDadosOrcamentos.Enabled = true;
            bIncluir.Enabled = false;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bCancelar.Enabled = true;
            bSalvar.Enabled = true;
            bVoltar.Enabled = false;
            tbValidade.Text = "5";
            bImprimir.Enabled = false;
            
        }
        public void alterar()
        {
            controle = "A";
            gbDadosOrcamentos.Enabled = true;
            bIncluir.Enabled = false;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bCancelar.Enabled = true;
            bSalvar.Enabled = true;
            bVoltar.Enabled = false;
            bImprimir.Enabled = false;
        }
        public void limpar()
        {
            gbDadosOrcamentos.Enabled = false;
            tbCodCliente.Text = "";
            tbCodFunc.Text = "";
            tbCodigo.Text = "";
            tbCodProd.Text = "";
            tbDescricaoProd.Text = "";
            tbQntd.Text = "";
            tbQntdParc.Text = "";
            tbValidade.Text = "";
            tbValNegociado.Text = "";
            tbValorTotal.Text = "";
            tbVlUnit.Text = "";
            lNomeCliente.Text = "";
            tbObservacao.Text = "";
            lNomeFunc.Text = "";
            dgProdutos.DataSource = null;
            bIncluir.Enabled = true;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bCancelar.Enabled = true;
            bImprimir.Enabled = false;
            bSalvar.Enabled = false;
            bVoltar.Enabled = true;
            associaGrid();
            associaGridConsulta();
        }
        public double calcula()
        {
            double val = 0;
            //double valor;
            try
            {
                foreach (DataRow linha in tab.Rows)
                {

                    val += Double.Parse(linha["val_produto"].ToString().Replace("R$",""));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return val;
        }

        #endregion

        private void bIncluir_Click(object sender, EventArgs e)
        {
            inserir();
        }

        private void frm_orcamentos_Load(object sender, EventArgs e)
        {
            limpar();
        }

        private void bCancelar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        private void bClientes_Click(object sender, EventArgs e)
        {
            ClienteBLL objBLL = null;
            Cliente objC = null;
            try
            {
                frm_consulta frm = new frm_consulta();
                frm.Text = "Selecionar Cliente";
                frm.controle = "C";
                frm.ShowDialog();
                if (frm.codigo != 0)
                {
                    objBLL = new ClienteBLL();
                    objC = objBLL.localizar(frm.codigo);
                    if (objC.codigo != 0)
                    {
                        tbCodCliente.Text = objC.codigo.ToString();
                        lNomeCliente.Text = objC.nome;
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void bFuncionarios_Click(object sender, EventArgs e)
        {
            FuncionarioBLL objBLL = null;
            Funcionarios objF = null;
            try
            {
                frm_consulta frm = new frm_consulta();
                frm.Text = "Selecionar Funcionario";
                frm.controle = "F";
                frm.gbLocalizar.Visible = false;
                frm.ShowDialog();
                if (frm.codigo != 0)
                {
                    objBLL = new FuncionarioBLL();
                    objF = objBLL.localizar(frm.codigo);
                    if (objF.codigo != 0)
                    {
                        lNomeFunc.Text = objF.nome;
                        tbCodFunc.Text = objF.codigo.ToString();
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void bVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void bExcluir_Click(object sender, EventArgs e)
        {
            OrcamentoBLL objBLL = null;
            Orcamentos objO = null;
            try
            {
                if (MessageBox.Show("Deseja Excluir?", "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    objBLL = new OrcamentoBLL();
                    objO = carregaPropriedades();
                    objBLL.excluir(objO);
                    MessageBox.Show("Excluido com Sucesso", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    limpar();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            objBLL = null;
            objO = null;
        }

        private void bSalvar_Click(object sender, EventArgs e)
        {
            OrcamentoBLL objBLL = null;
            Orcamentos objO = null;
            Boolean ret;
            try
            {
                ret = validaCampos();
                if (ret == true)
                {
                    objO = carregaPropriedades();

                    objBLL = new OrcamentoBLL();
                    if (controle == "I")
                        objBLL.inserir(objO);
                    else
                        objBLL.alterar(objO);

                    MessageBox.Show("Salvo com Sucesso!"+ Environment.NewLine + "Código Registrado: " + objO.cod_orcamento + "", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    bCancelar_Click(sender, e);
                    if (MessageBox.Show("Deseja Imprimir Orçamento agora?", "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        frm_relatorio frm = new frm_relatorio();
                        rpt_Orcamentos rpt = new rpt_Orcamentos();
                        //rpt.RecordSelectionFormula = "{venda.dt_venda}between" + dtInicial.Value + " and " + dtFinal.Value + "";
                        rpt.SetParameterValue(0, objO.cod_orcamento);
                        //rpt.SetParameterValue(1, dtFinal.Value);
                        frm.CR.ReportSource = rpt;
                        frm.Text = "Orçamento de Produtos";
                        frm.ShowDialog();
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            objBLL = null;
        }

        private void bProdutos_Click(object sender, EventArgs e)
        {
            ProdutosBLL objBLL = null;
            Produtos objP = null;
            try
            {
                frm_consulta frm = new frm_consulta();
                frm.Text = "Selecionar Produtos";
                frm.controle = "P";
                //frm.gbLocalizar.Visible = false;
                frm.ShowDialog();
                if (frm.codigo != 0)
                {
                    objBLL = new ProdutosBLL();
                    objP = objBLL.localizar(frm.codigo);
                    if (objP.cod_produto != 0)
                    {
                        tbCodProd.Text = objP.cod_produto.ToString();
                        tbDescricaoProd.Text = objP.descricao_produto;
                        tbVlUnit.Text = objP.preco_venda.ToString("C2");
                        tbQntd.Text = (1).ToString();
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void bAdicionar_Click(object sender, EventArgs e)
        {
            try
            {
                if (tbDescricaoProd.Text == "" || tbQntd.Text == "" || tbVlUnit.Text == "")
                    MessageBox.Show("Preencha o campo corretamente", "Mensagem");
                else
                {
                    DataRow linha;
                    double val;
                    val = int.Parse(tbQntd.Text) * double.Parse(tbVlUnit.Text.Replace("R$",""));
                    linha = tab.NewRow();
                    linha["cod_produto"] = tbCodProd.Text;
                    linha["descricao_produto"] = tbDescricaoProd.Text;
                    linha["qntd_produto"] = tbQntd.Text;
                    linha["val_produto"] = val.ToString();
                    tab.Rows.Add(linha);
                    tab.AcceptChanges();
                    tbDescricaoProd.Text = "";
                    tbQntd.Text = "";
                    tbCodProd.Text = "";
                    tbVlUnit.Text = "";
                    Double ret;
                    ret = calcula();
                    tbValorTotal.Text = ret.ToString("C2");
                    tbQntdParc.Text = "1";
                    tbValNegociado.Text = ret.ToString("C2");

                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void bExcluirProd_Click(object sender, EventArgs e)
        {
            int i = 0;
            double ret = 0;
            i = 0;
            try
            {
                foreach (DataGridViewRow linha in dgProdutos.SelectedRows)
                {
                    i = linha.Index;
                }
                if ((i >= 0))
                {
                    tab.Rows.RemoveAt(i);
                    tab.AcceptChanges();
                    ret = calcula();
                    tbValorTotal.Text = ret.ToString("C2");
                    tbValNegociado.Text = ret.ToString("C2");
                }
                else
                {
                    MessageBox.Show("Não existem itens para ser excluido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Não existem itens para ser excluido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tbQntdParc_Leave(object sender, EventArgs e)
        {
            try
            {
                if (tbValorTotal.Text != "" && tbQntdParc.Text != "" && tbQntdParc.Text != (0).ToString())
            {
                double val = double.Parse(tbValorTotal.Text.Replace("R$",""));
                int qntd = int.Parse(tbQntdParc.Text);
                tbValNegociado.Text = (val / qntd).ToString("C2");
            }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbValorTotal_Enter(object sender, EventArgs e)
        {
            try
            {
                if (tbValorTotal.Text != "")
                {
                    Double val = Double.Parse(tbValorTotal.Text.Replace("R$", ""));
                    tbValorTotal.Text = val.ToString();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbValorTotal_Leave(object sender, EventArgs e)
        {
            try
            {
                if (tbValorTotal.Text != "")
                {
                    Double val = Double.Parse(tbValorTotal.Text);
                    tbValorTotal.Text = val.ToString("C2");
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbValNegociado_Enter(object sender, EventArgs e)
        {
            try
            {
                if (tbValNegociado.Text != "")
                {
                    Double val = Double.Parse(tbValNegociado.Text.Replace("R$", ""));
                    tbValNegociado.Text = val.ToString();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbValNegociado_Leave(object sender, EventArgs e)
        {
            try
            {
                if (tbValNegociado.Text != "")
                {
                    Double val = Double.Parse(tbValNegociado.Text);
                    tbValNegociado.Text = val.ToString("C2");
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void dgOrcamentos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
             int codigo = 0;
            OrcamentoBLL objBLL = null;
            Orcamentos objO = null;
            try
            {
                codigo = int.Parse(dgOrcamentos.Rows[e.RowIndex].Cells[0].Value.ToString());
                if(codigo != 0)
                {
                    bAlterar.Enabled = true;
                    bExcluir.Enabled = true;
                    bIncluir.Enabled = false;
                    bCancelar.Enabled = true;
                    bImprimir.Enabled = true;
                    objBLL = new OrcamentoBLL();
                    objO = objBLL.localizar(codigo);
                    if (objO.cod_orcamento != 0)
                    {
                        dgProdutos.DataSource = null;
                        associaGrid();
                        carregaCampos(objO);
                        tabOrcamentos.SelectedTab = tabIncluirOrcamentos;
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void bAlterar_Click(object sender, EventArgs e)
        {
            alterar();
        }

        private void tbCodCliente_Leave(object sender, EventArgs e)
        {
            try
            {
                if (tbCodCliente.Text != "")
                {
                    int cod_cliente = int.Parse(tbCodCliente.Text);
                    Cliente objCliente = new Cliente();
                    ClienteBLL objClienteBLL = new ClienteBLL();
                    objCliente = objClienteBLL.localizar(cod_cliente);
                    if (objCliente.codigo != 0)
                        lNomeCliente.Text = objCliente.nome;
                    else
                        MessageBox.Show("Cliente não cadastrado","Mensagem");
                }
            }
            catch (Exception)
            {

                MessageBox.Show("Cliente não cadastrado");
                tbCodCliente.Text = "";
                tbCodCliente.Focus();
                lNomeCliente.Text = "";
            }
        }

        private void tbCodFunc_Leave(object sender, EventArgs e)
        {
            try
            {
                if (tbCodFunc.Text != "")
                {
                    int cod_func = int.Parse(tbCodFunc.Text);
                    Funcionarios objFunc = new Funcionarios();
                    FuncionarioBLL objFuncBLL = new FuncionarioBLL();
                    objFunc = objFuncBLL.localizar(cod_func);
                    if (objFunc.codigo != 0)
                        lNomeFunc.Text = objFunc.nome;
                    else
                        MessageBox.Show("Cliente não cadastrado");
                }
            }
            catch (Exception)
            {

                MessageBox.Show("Funcionário não cadastrado","Mensagem");
                tbCodFunc.Text = "";
                tbCodFunc.Focus();
                lNomeFunc.Text = "";
            }
        }

        private void bImprimir_Click(object sender, EventArgs e)
        {
            frm_relatorio frm = new frm_relatorio();
            rpt_Orcamentos rpt = new rpt_Orcamentos();
            //rpt.RecordSelectionFormula = "{venda.dt_venda}between" + dtInicial.Value + " and " + dtFinal.Value + "";
            rpt.SetParameterValue(0, int.Parse(tbCodigo.Text));
            //rpt.SetParameterValue(1, dtFinal.Value);
            bCancelar_Click(sender, e);
            frm.CR.ReportSource = rpt;
            frm.Text = "Orçamento de Produtos";
            frm.Show();
        }

        private void frm_orcamentos_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Escape))
                this.Close();
        }

        
    }
}
